/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package WebServices;

import SessionBeans.AutoServicioFacade;
import SessionBeans.ClienteFacade;
import SessionBeans.ComisionFacade;
import SessionBeans.FacturaFacade;
import SessionBeans.HotelServicioFacade;
import SessionBeans.InstanciaAutoServicioFacade;
import SessionBeans.InstanciaHotelServicioFacade;
import SessionBeans.InstanciaTourServicioFacade;
import SessionBeans.InstanciaTransporteServicioFacade;
import SessionBeans.ProveedorFacade;
import SessionBeans.ServicioFacade;
import SessionBeans.TourServicioFacade;
import SessionBeans.TransporteServicioFacade;
import entity.Auto;
import entity.AutoServicio;
import entity.Ciudad;
import entity.Cliente;
import entity.Comision;
import entity.Factura;
import entity.Habitacion;
import entity.HotelServicio;
import entity.InstanciaAutoServicio;
import entity.InstanciaHotelServicio;
import entity.InstanciaTourServicio;
import entity.InstanciaTransporteServicio;
import entity.Proveedor;
import entity.Servicio;
import entity.Tour;
import entity.TourServicio;
import entity.TransporteServicio;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
import javax.jws.Oneway;

/**
 *
 * @author javier
 */
@WebService(serviceName = "AgenciaWS",wsdlLocation="META-INF/wsdl/AgenciaWS.wsdl")
@Stateless()
public class AgenciaWS {

    @EJB
    private ProveedorFacade ejbRefPro;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    @EJB
    private ServicioFacade ejbRefSer;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private ClienteFacade ejbRefCli;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private InstanciaHotelServicioFacade ejbRefInstanciaHotelServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private HotelServicioFacade ejbRefHotelServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private InstanciaTourServicioFacade ejbRefInstanciaTourServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private TourServicioFacade ejbRefTourServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private AutoServicioFacade ejbRefAutoServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")

    @EJB
    private TransporteServicioFacade ejbRefTransporteServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
     
    @EJB
    private InstanciaAutoServicioFacade ejbRefInstanciaAutoServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
     
    @EJB
    private InstanciaTransporteServicioFacade ejbRefInstanciaTransporteServicio;// Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Web Service Operation")
    
    @EJB
    private ComisionFacade ejbRefCom;
    
    @EJB
    private FacturaFacade ejbRefFactura;   
         
    @WebMethod(operationName = "createComision")
    @Oneway
    public void createComision(@WebParam(name = "entity")
    Comision entity) {
        ejbRefCom.create(entity);
    }

    @WebMethod(operationName = "editComision")
    @Oneway
    public void editComision(@WebParam(name = "entity")
    Comision entity) {
        ejbRefCom.edit(entity);
    }

    @WebMethod(operationName = "removeComision")
    @Oneway
    public void removeComision(@WebParam(name = "entity")
    Comision entity) {
        ejbRefCom.remove(entity);
    }

    @WebMethod(operationName = "findComision")
    public Comision findComision(@WebParam(name = "id")
    Object id) {
        return ejbRefCom.find(id);
    }
     @WebMethod(operationName = "findAllComision")
    public List<Comision> findAllComision() {
        return ejbRefCom.findAll();
    }
    @WebMethod(operationName = "removeFactura")
    @Oneway
    public void removeFactura(@WebParam(name = "entity")
    Factura entity) {
        ejbRefFactura.remove(entity);
    }

    @WebMethod(operationName = "findAllFactura")
    public List<Factura> findAllFactura() {
        return ejbRefFactura.findAll();
    }

    @WebMethod(operationName = "countFactura")
    public int countFactura() {
        return ejbRefFactura.count();
    }
    
    @WebMethod(operationName = "createProveedor")
    @Oneway
    public void createProveedor(@WebParam(name = "entity")
    Proveedor entity) {
        ejbRefPro.create(entity);
    }
    @WebMethod(operationName = "editProveedor")
    @Oneway
    public void editProveedor(@WebParam(name = "entity")
    Proveedor entity) {
        ejbRefPro.edit(entity);
    }

    @WebMethod(operationName = "removeProveedor")
    @Oneway
    public void removeProveedor(@WebParam(name = "entity")
    Proveedor entity) {
        ejbRefPro.remove(entity);
    }

    @WebMethod(operationName = "findProveedor")
    public Proveedor findProveedor(@WebParam(name = "id")
    Object id) {
        return ejbRefPro.find(id);
    }
     

    @WebMethod(operationName = "obtenerInstanciaXTransporteServicio")
    public List<InstanciaTransporteServicio> obtenerInstanciaXTransporteServicio(@WebParam(name = "transporteServicio")
    TransporteServicio transporteServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin, @WebParam(name = "origen")
    Ciudad origen, @WebParam(name = "destino")
    Ciudad destino) {
        return ejbRefInstanciaTransporteServicio.obtenerInstanciaXTransporteServicio(transporteServicio, fechaInicio, fechaFin, origen, destino);
    } 

    @WebMethod(operationName = "obtenerInstanciasXAutoServicio")
    public List<InstanciaAutoServicio> obtenerInstanciasXAutoServicio(@WebParam(name = "autoServicio")
    AutoServicio autoServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaAutoServicio.obtenerInstanciasXServicio(autoServicio, fechaInicio, fechaFin);
    }

    @WebMethod(operationName = "obtenerDisponibilidadAuto")
    public List<Auto> obtenerDisponibilidadAuto(@WebParam(name = "autoServicio")
    AutoServicio autoServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaAutoServicio.obtenerDisponibilidadAuto(autoServicio, fechaInicio, fechaFin);
    }
    
    @WebMethod(operationName = "obtenerInstanciasXTourServicio")
    public List<InstanciaTourServicio> obtenerInstanciasXTourServicio(@WebParam(name = "tourServicio")
    TourServicio tourServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaTourServicio.obtenerInstanciasXServicio(tourServicio, fechaInicio, fechaFin);
    }

    @WebMethod(operationName = "obtenerDisponibilidadTour")
    public List<Tour> obtenerDisponibilidadTour(@WebParam(name = "tourServicio")
    TourServicio tourServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaTourServicio.obtenerDisponibilidadTour(tourServicio, fechaInicio, fechaFin);
    }

    @WebMethod(operationName = "findHotelServicio")
    public HotelServicio findHotelServicio(@WebParam(name = "id")
    Object id) {
        return ejbRefHotelServicio.find(id);
    }   

    @WebMethod(operationName = "findTourServicio")
    public TourServicio findTourServicio(@WebParam(name = "id")
    Object id) {
        return ejbRefTourServicio.find(id);
    }
    
    @WebMethod(operationName = "findAutoServicio")
    public AutoServicio findAutoServicio(@WebParam(name = "id")
    Object id) {
        return ejbRefAutoServicio.find(id);
    }   
    
    @WebMethod(operationName = "findTransporteServicio")
    public TransporteServicio findTransporteServicio(@WebParam(name = "id")
    Object id) {
        return ejbRefTransporteServicio.find(id);
    }
    
    @WebMethod(operationName = "obtenerDisponibilidadHabitacion")
    public List<Habitacion> obtenerDisponibilidadHabitacion(@WebParam(name = "hotelServicio")
    HotelServicio hotelServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaHotelServicio.obtenerDisponibilidadHabitacion(hotelServicio, fechaInicio, fechaFin);
    }
    
    @WebMethod(operationName = "obtenerInstanciasXHotelServicio")
    public List<InstanciaHotelServicio> obtenerInstanciasXHotelServicio(@WebParam(name = "hotelServicio")
    HotelServicio hotelServicio, @WebParam(name = "fechaInicio")
    Date fechaInicio, @WebParam(name = "fechaFin")
    Date fechaFin) {
        return ejbRefInstanciaHotelServicio.obtenerInstanciasXServicio(hotelServicio, fechaInicio, fechaFin);
    }

    @WebMethod(operationName = "findAllProveedor")
    public List<Proveedor> findAllProveedor() {
        return ejbRefPro.findAll();
    }

    @WebMethod(operationName = "findServicio")
    public Servicio findServicio(@WebParam(name = "id")
    Object id) {
        return ejbRefSer.find(id);
    }

    @WebMethod(operationName = "findAllServicio")
    public List<Servicio> findAllServicio() {
        return ejbRefSer.findAll();
    }
    
    @WebMethod(operationName = "createCliente")
    @Oneway
    public void createCliente(@WebParam(name = "entity")
    Cliente entity) {        
        ejbRefCli.create(entity);
    }

    @WebMethod(operationName = "editCliente")
    @Oneway
    public void editCliente(@WebParam(name = "entity")
    Cliente entity) {
        ejbRefCli.edit(entity);
    }

    @WebMethod(operationName = "removeCliente")
    @Oneway
    public void removeCliente(@WebParam(name = "entity")
    Cliente entity) {
        ejbRefCli.remove(entity);
    }

    @WebMethod(operationName = "countCliente")
    public int countCliente() {
        return ejbRefCli.count();
    }

    @WebMethod(operationName = "logInCliente")
    public Cliente logInCliente(@WebParam(name = "usuario")
    String usuario, @WebParam(name = "pass")
    String pass) {
        return ejbRefCli.logIn(usuario, pass);
    }
    
    @WebMethod(operationName = "crearCliente")
    public Cliente crearCliente(@WebParam(name = "usuario")
    String usuario, @WebParam(name = "pass")
    String pass,@WebParam(name="email")
    String email, @WebParam(name = "nombre")
    String nombre, @WebParam(name = "apellido")
    String apellido, @WebParam(name="dia")
    String dia, @WebParam(name="mes")
    String mes,  @WebParam(name="ano")
    String ano) {
        Cliente cliente = new Cliente();
        cliente.setUsuario(usuario);
        cliente.setPass(pass);
        cliente.setEmail(email);
        cliente.setNombre(nombre);
        cliente.setApellido(apellido);
        Date fechaNacimiento = new Date(Integer.parseInt(dia), Integer.parseInt(mes), Integer.parseInt(ano));
        cliente.setFechaNacimiento(fechaNacimiento);
        ejbRefCli.create(cliente);
        return cliente;
        
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "enviarMensaje")
    @Oneway
    public void enviarMensaje(@WebParam(name = "servicio")
    Servicio servicio) {
        //servicio.getMensajes().add(mensaje);
        ejbRefSer.edit(servicio);
    }
}
